Technical Q&A OV03
Detecting Classic and Carbon X Environments




Q: äJî≠íÜÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃàÍïîÇÃã@î\ÇÕ Classic ä¬ã´Ç≈ǧNjÇ≠ìÆçÏǵNjÇπÇÒÅBàÍïîÇÃã@î\Ç™égǶǻÇ≠Ç»ÇÈDZÇΔÇÉÜÅ[ÉUÇ…ímÇÁÇπÇÈDZÇΔÇ™Ç≈Ç´ÇÈÇÊǧDžÅAClassic ä¬ã´ÇåüèoÇ∑ÇÈÇ…ÇÕǫǧÇ∑ÇÍnjǢǢÇ≈Ç∑Ç©ÅH

A: Classic ä¬ã´ÇÕÅAÅuÉäÉXÉg 1.ÅvÇ…é¶Ç∑ÇÊǧDž Gestalt ÇégǡǃåüèoÇ≈Ç´Ç‹Ç∑ÅB

// DZÇà Q&A ÇÃé∑ïMéûì_Ç≈ÅAUniversal Interfaces ÇÃç≈êVÉoÅ[ÉWÉáÉìÇÕ
// 3.3.2ÅBà»â∫ÇÃíËã`ÇÕ UI 3.3.2 Ç…ÇÕä‹Ç‹ÇÍǃǢǻǢǙÅA
// éüÇÃÉäÉäÅ[ÉXÉoÅ[ÉWÉáÉìÇ…ÇÕä‹Ç‹ÇÍÇÈó\íËÅB
†
enum {
    gestaltMacOSCompatibilityBoxAttr = FOUR_CHAR_CODE('bbox'),
                /* Classic ÇÃë∂ç›ÇΔã@î\ */
    gestaltMacOSCompatibilityBoxPresent = 0,                    
                /* Classic Ç≈é¿çsÇ≥ÇÍǃǢÇÈèÍçáÇÕ true */
    gestaltMacOSCompatibilityBoxHasSerial = 1,                  
                /* Classic ÉVÉäÉAÉãÉTÉ|Å[ÉgÇ™é¿ëïÇ≥ÇÍǃǢÇÈèÍçáÇÕ true */
    gestaltMacOSCompatibilityBoxless = 2                        
                /* É{ÉbÉNÉXÉåÉX (Carbon/Cocoa ÇΔã§óLÇ≥ÇÍÇÈÉXÉNÉäÅ[Éì)
                   ÇÃèÍçáÇÕ true */
};
†
static Boolean RunningOnClassic(void)
{
    UInt32 response;
    
    return (Gestalt(gestaltMacOSCompatibilityBoxAttr, 
                    (SInt32 *) &response) == noErr)
                && ((response & 
                    (1 << gestaltMacOSCompatibilityBoxPresent))
                    != 0);
}

ÉäÉXÉg 1. ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ Classic ä¬ã´Ç≈é¿çsÇ≥ÇÍǃǢÇÈǩǫǧǩÇåüèoÇ∑ÇÈ

Q: äJî≠íÜÇà Carbon ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉgÉâÉfÉBÉVÉáÉiÉã Mac OS Ç≈ÇÕìKêÿÇ…ìÆçÏǵNjÇ∑Ç™ÅAMac OS X Ç≈ÇÕàÍïîÇÃã@î\ǙǧNjÇ≠ìÆçÏǵNjÇπÇÒÅBÉvÉâÉbÉgÉtÉHÅ[ÉÄÇ…âûÇ∂ǃìKêÿÇ»ï˚ñ@Ç≈ìÆçÏÇ≈Ç´ÇÈÇÊǧDžÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ Mac OS X Ç≈é¿çsÇ≥ÇÍǃǢÇÈDZÇΔÇåüèoÇ∑ÇÈÇ…ÇÕǫǧÇ∑ÇÍnjǢǢÇ≈Ç∑Ç©ÅH

A: DTS Ç≈ÇÕÅAÉvÉâÉbÉgÉtÉHÅ[ÉÄëSëÃÇ≈ÇÕÇ»Ç≠ÅAì¡íËÇÃã@î\ÇëŒè€Ç…ÉeÉXÉgÇçsǧDZÇΔÇÇ®ä©ÇflǵǃǢNjÇ∑ÅBÇΩÇΔǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉgÉâÉfÉBÉVÉáÉiÉã Mac OS è„ÇÃîÒ Carbon API Ç÷ÇÃÉAÉNÉZÉXÇïKóvÇΔÇ∑ÇÈèÍçáÇÕÅAGetSharedLibrary Ç®ÇÊÇ— FindSymbol ÇégǡǃÅAǪÇÍÇÁÇà API Ç…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇÇ®ä©ÇflǵNjÇ∑ÅBGetSharedLibrary ÇåƒÇ—èoǵÇΩÇ™é∏îsǵÇΩèÍçáÇÕÅAÉvÉâÉbÉgÉtÉHÅ[ÉÄÇ…ä÷åWÇ»Ç≠ÅAñ⁄ìIÇÃã@î\Ç…ÇÕÉAÉNÉZÉXÇ≈Ç´Ç‹ÇπÇÒÅB

àÍï˚ÅAìKêÿÇ»ã@î\ÉeÉXÉgÇ™ë∂ç›ÇπÇ∏ÅAÉvÉâÉbÉgÉtÉHÅ[ÉÄÇÃÉeÉXÉgÇæÇØÇ™â¬î\Ç»ÉPÅ[ÉXLJímÇÁÇÍǃǢNjÇ∑ÅBDZÇÃÇÊǧǻèÍçáÅACarbon ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕÅuÉäÉXÉg 2.ÅvÇ…é¶Ç∑ÇÊǧDž Gestalt ÇégópǵǃÅAǪÇÍÇ™ Mac OS X è„Ç≈é¿çsÇ≥ÇÍǃǢÇÈǩǫǧǩÇåüèoÇ≈Ç´Ç‹Ç∑ÅB

static Boolean RunningOnCarbonX(void)
{
    UInt32 response;
    
    return (Gestalt(gestaltSystemVersion, 
                    (SInt32 *) &response) == noErr)
                && (response >= 0x01000);
}

ÉäÉXÉg 2. Carbon ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ Mac OS X Ç≈é¿çsÇ≥ÇÍǃǢÇÈǩǫǧǩÇåüèoÇ∑ÇÈ

çXêVì˙ÅF2001 îN 1 åé 16 ì˙